/**
 * Card 数据格式:
 * 	id: Strimg						ID
 * 	name: String					名称
 * 	description: String				描述
 *  currentPrice: Number			现价
 * 	originalPrice: Number			原价
 * 	monthlySales: Integer			月销售
 * 	unit: String					单位	
 * 	image: String					图片路径
 * 	tags: String[]					标签
 */

const key = "cat"

export class CardUtil {
    // 添加商品到购物车
    static addCard(product) {        
		uni.showToast({title: '已添加到购物车', icon: 'success'})
		const cat = this.getCat()
		// 1.先查看购物车中存不存在相同的商品，存在则直接 count + 1, 否则新商品入车
		let index = cat.findIndex(item => item.id == product.id)
		if (index != -1) cat[index].count += 1
		else cat.push({...product, count: 1})
		// 2.数据存入缓存
		uni.setStorageSync(key, cat)
		// 3.重置 CatBar
		this.initCatBar()
	}
	
	/**
	 * 根据 ID 列表删除购物车中的商品
	 * @param {String[]} ids
	 * @param {Function} success
	 */
	static deleteByIds(ids, success) {
		// 1.过滤掉对应 id 的商品
		let cat = this.getCat()
		cat = cat.filter(item => !ids.includes(item.id))
		// 2.重置缓存
		uni.setStorageSync(key, cat)
		// 3.重置Bar
		this.initCatBar()
		// 4.传递给回调函数
		success(cat)
	}
	
	/**
	 * 更新商品数量
	 * @param {String} id 
	 * @param {Number} delta 
	 * @param {Function} success 
	 */
	static updateCount(id, delta, success) {
		const cat = this.getCat()
		const index = cat.findIndex(item => item.id == id)
		// 1.更新后商品数量为 0，则移除购物车
		cat[index].count += delta
		if (cat[index].count <= 0) cat.splice(index, 1)
		// 2.更新缓存
		uni.setStorageSync(key, cat)
		// 3.更新Bar
		this.initCatBar()
		// 4.返回数据
		success(cat)
	}
	
	/**
	 * @return {Array}
	 */
	static getCat() {return uni.getStorageSync(key) || []}
	
	// 初始化购物车导航栏图标
	static initCatBar() {
		const cat = this.getCat()
		if (cat.length > 0) uni.setTabBarBadge({index: 1, text: cat.length.toString()})
		else uni.removeTabBarBadge({ index: 1 })
	}
	
	// 清空购物车
	static clear() {uni.removeStorageSync(key)}
}